// find()函数用来查找目标元素，找到就返回该元素，找不到返回undefined。
// findIndex()函数也是查找目标元素，找到就返回元素的索引，找不到就返回-1。
// 他们的都是一个查找回调函数。
// [1, 2, 3, 4].find((value, index, arr) => {})
// 查找函数有三个参数。
// value：每一次迭代查找的数组元素。
// index：每一次迭代查找的数组元素索引。
// arr：被查找的数组。
// ------------------------- 1. find() 查找目标元素，找到就返回该元素，找不到返回undefined
// const arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
// var ret1 = arr1.find((value, index, arr) => {
//   return value > 4
// })

// var ret2 = arr1.find((value, index, arr) => {
//   return value > 14
// })
// console.log(ret1) // 5  只返回数组中第一个符合条件的数
// console.log(ret2) // undefined

// ----------- findIndex()  2. 查找数组里符合条件的元素，找到就返回元素的索引，找不到就返回-1
// var ret3 = arr1.findIndex((value, index, arr) => {
//   return value > 4
// })

// var ret4 = arr1.findIndex((value, index, arr) => {
//   return value > 14
// })
// console.log(ret3) // 4 只返回数组中第一个符合条件的数的索引
// console.log(ret4) // -1

// ------------------------------ 3. forEach()  遍历数组
// 每次遍历数组里面的一个元素，就会触发一次函数体执行(传入相应值)
// const arr1 = [5, 10, 20, 35, 42, 50]
// arr1.forEach(function (item, index, arr) {
//   console.log('------')
//   console.log(item)
//   console.log(index)
//   console.log(arr)
// })

// ------------------------ 4. filter() 过滤符合条件的值，返回新数组
// var oldArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// var newArray = oldArray.filter(function (val) { return val < 6 })
// console.log(newArray) // [ 1, 2, 3, 4, 5 ]

// ------------------------ 5.  map() - 遍历操作后返回的结果
// 遍历数组，内部创建全新数组，收集每次return的值，遍历结束，返回这个全新数组
// const arr2 = [5, 10, 20, 35, 42, 50]
// const res2 = arr2.map(function (item, index, array) {
//   return item * 2
// })
// console.log(res2) // [10, 20, 40, 70, 84, 100]

//  ------------------- 6.  every() 找到数组里面不符合条件的元素
// every() 只要有一个不符合条件，就结束循环，返回false; 都符合条件返回 true
// const arr6 = [5, 10, 20, 35, 42, 50]
// const res6 = arr6.every(val => {
//   console.log(val)
//   return val < 30
// })
// console.log(res6) // fasle

// ----------------- 7.  some() 找到数组里符合条件的元素
// some() 只要有一个元素符合，就结束循环，返回true
// const arr7 = [5, 10, 20, 35, 42, 50]
// const res7 = arr7.some(function (val) {
//   console.log(val)
//   return val > 35
// })
// console.log(res7) // true

// ----------------------- 8. reduce() 对数组进行累积运算
// 关键：函数体里思考往sum上累加什么，一定要有return(下次函数体执行sum初始值等return返回的值呢)
// 运行过程：
// 第一次遍历：sum：0, val: 5, 函数体执行, sum: 5, return sum; 都return给函数体下一次执行时，给sum赋值
// 第二次遍历：sum: 5, val: 10, 函数执行，sum: 15, return sum; 下一次函数体执行sum赋值
// 第三次遍历：sum: 15, val: 20, ........ sum: 35
// 结束遍历，reduce()方法会把最后sum值返回在原地
// arr.reduce(function (sum, val) { return sum += val }, 0) // sum: 变量名(负责累积求结果), 0 就是它的初始值
// const arr5 = [5, 10, 20, 35, 42, 50]
// const res5 = arr5.reduce(function (sum, val, index, arr) {
//   sum = sum + val
//   return sum
// }, 0)
// console.log(res5) // 162

// ------------------- 9. 过滤掉重复的数据
const arr1 = [2, 3, 4]
const arr2 = [1, 2, 3, 4, 5]
const res = arr2.filter(item2 => {
  const index = arr1.findIndex(item1 => item1 === item2)
  return index === -1
})
console.log(res) // [1, 5]

const res2 = arr2.filter(item2 => {
  const num = arr1.find(item1 => item1 === item2)
  return num === undefined
})
console.log(res2) // [1, 5]
